package io.gitee.luoyuan800.tool.llm.web;

import java.util.concurrent.LinkedBlockingQueue;

/**
 * 一个抑制中断异常的 {@link LinkedBlockingQueue} 实现。
 * <p>
 * 该类继承自 {@link LinkedBlockingQueue}，但重写了 {@code put} 和 {@code add} 方法，
 * 在遇到 {@link InterruptedException} 时不会抛出异常，而是静默处理或返回 {@code false}。
 * 适用于不希望中断异常影响程序流程的场景。
 * </p>
 * @author Luoyuan/ Gavin
 * @param <T> 队列中元素的类型
 */
public class SuppressExceptionLinkedBlockingQueue<T> extends LinkedBlockingQueue<T> {

    /**
     * 将指定的元素插入队列尾部，如果队列已满则等待空间可用。
     * <p>
     * 此方法会静默处理 {@link InterruptedException}，不会抛出中断异常。
     * </p>
     *
     * @param t 要添加的元素
     * @throws ClassCastException 如果元素的类不允许它被添加到此队列
     * @throws NullPointerException 如果指定的元素为 null
     * @throws IllegalArgumentException 如果元素的某些属性不允许它被添加到此队列
     */
    @Override
    public void put(T t) {
        try {
            super.put(t);
        } catch (InterruptedException e) {
            // 静默处理中断异常
        }
    }

    /**
     * 将指定的元素插入队列尾部（如果立即可行且不会超过队列的容量）。
     * <p>
     * 如果队列已满，此方法会等待空间可用，并在遇到 {@link InterruptedException} 时返回 {@code false}。
     * 如果元素为 {@code null}，则直接返回 {@code false}。
     * </p>
     *
     * @param t 要添加的元素
     * @return 如果元素成功添加到队列则返回 {@code true}，否则返回 {@code false}
     * @throws ClassCastException 如果元素的类不允许它被添加到此队列
     * @throws IllegalArgumentException 如果元素的某些属性不允许它被添加到此队列
     */
    @Override
    public boolean add(T t) {
        if(t!=null) {
            try {
                super.put(t);
                return true;
            } catch (InterruptedException e) {
                return false;
            }
        }
        return false;
    }
}
